<template>
	<view class="wx-login-container">
		<view class="logo-area">
			<image class="logo" src="/static/img/logo.png" mode="aspectFit"></image>
			<text class="app-name">宠物云平台</text>
		</view>
		
		<view class="login-area">
			<view class="status-area">
				<view v-if="loading" class="loading-status">
					<u-loading mode="circle" size="60"></u-loading>
					<text class="status-text">登录中...</text>
				</view>
				<view v-else-if="hasError" class="error-status">
					<u-icon name="close-circle" color="#fa3534" size="60"></u-icon>
					<text class="status-text">{{ errorMsg }}</text>
					<button class="retry-btn" type="primary" @click="retryLogin">重试</button>
				</view>
				<view v-else-if="isLoggedIn" class="success-status">
					<u-icon name="checkmark-circle" color="#19be6b" size="60"></u-icon>
					<text class="status-text">登录成功</text>
				</view>
				<view v-else class="login-btn-area">
					<!-- 新版API按钮 -->
					<button 
						v-if="canUseGetUserProfile"
						class="login-btn" 
						type="primary" 
						@click="getUserProfile">
						<text>微信账号一键登录</text>
					</button>
					
					<!-- 旧版API按钮 -->
					<button 
						v-else
						class="login-btn" 
						type="primary" 
						open-type="getUserInfo" 
						@getuserinfo="getUserInfo">
						<text>微信账号一键登录</text>
					</button>
					
					<text class="tip-text">授权后将获取您的公开信息</text>
				</view>
			</view>
			
			<view class="policy-area">
				<text class="policy-text">登录即表示您同意</text>
				<text class="policy-link">《用户协议》</text>
				<text class="policy-text">和</text>
				<text class="policy-link">《隐私政策》</text>
			</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			loading: false,
			hasError: false,
			errorMsg: '',
			isLoggedIn: false,
			userInfo: null,
			canUseGetUserProfile: false // 标记是否可以使用新API
		}
	},
	onLoad() {
		// 检查是否已登录
		this.checkLoginStatus();
		// 检查API可用性
		this.checkApiAvailability();
	},
	methods: {
		// 检查微信API可用性
		checkApiAvailability() {
			try {
				const systemInfo = uni.getSystemInfoSync();
				console.log('系统信息:', systemInfo);
				
				// 在微信小程序环境中
				// #ifdef MP-WEIXIN
				// 微信小程序中使用旧式API更可靠
				this.canUseGetUserProfile = false;
				console.log('微信小程序环境，使用open-type="getUserInfo"方式');
				// #endif
				
				// #ifndef MP-WEIXIN
				console.warn('不在微信环境中，无法使用微信特有API');
				this.canUseGetUserProfile = false;
				// #endif
			} catch (error) {
				console.error('获取系统信息失败:', error);
				this.canUseGetUserProfile = false;
			}
		},
		
		// 检查登录状态
		async checkLoginStatus() {
			try {
				const user = await this.$leanCloud.user.getCurrent();
				if (user) {
					this.isLoggedIn = true;
					this.userInfo = user;
					
					// 延迟1.5秒后跳转到首页
					setTimeout(() => {
						this.navigateToIndex();
					}, 1500);
				}
			} catch (error) {
				console.error('检查登录状态失败:', error);
			}
		},
		
		// 获取用户信息（旧API）
		getUserInfo(e) {
			console.log('使用open-type获取用户信息:', e);
			if (e.detail.errMsg === 'getUserInfo:ok') {
				this.userInfo = e.detail.userInfo;
				console.log('获取到的用户信息:', this.userInfo);
				// 进行登录操作
				this.doLogin();
			} else {
				// 用户拒绝授权
				this.showError('您已拒绝授权');
			}
		},
		
		// 获取用户信息 (新API)
		getUserProfile() {
			if (this.canUseGetUserProfile) {
				uni.getUserProfile({
					desc: '用于完善用户资料',
					success: (res) => {
						console.log('获取用户信息成功:', res);
						this.userInfo = res.userInfo;
						// 进行登录操作
						this.doLogin();
					},
					fail: (err) => {
						console.error('获取用户信息失败:', err);
						this.showError('您已拒绝授权');
					}
				});
			} else {
				console.warn('无法使用新API获取用户信息');
				this.showError('您的微信版本不支持新API');
			}
		},
		
		// 执行登录
		async doLogin() {
			this.loading = true;
			this.hasError = false;
			
			try {
				console.log('开始调用微信登录');
				// 调用微信登录
				const result = await this.$leanCloud.user.wechatLogin();
				console.log('微信登录成功:', result);
				
				// 如果成功并且有用户信息，更新用户资料
				if (result && this.userInfo) {
					try {
						console.log('更新用户资料:', this.userInfo);
						await this.updateUserProfile(result, this.userInfo);
						console.log('用户资料更新成功');
					} catch (error) {
						console.error('更新用户资料失败:', error);
						// 更新资料失败不影响登录流程
					}
				}
				
				this.loading = false;
				this.isLoggedIn = true;
				
				// 延迟1.5秒后跳转到首页
				setTimeout(() => {
					this.navigateToIndex();
				}, 1500);
			} catch (error) {
				console.error('微信登录失败:', error);
				this.showError('登录失败，请重试');
			}
		},
		
		// 更新用户资料
		async updateUserProfile(user, profileInfo) {
			return this.$leanCloud.user.updateUserInfo({
				nickName: profileInfo.nickName,
				avatarUrl: profileInfo.avatarUrl,
				gender: profileInfo.gender,
				country: profileInfo.country,
				province: profileInfo.province,
				city: profileInfo.city
			});
		},
		
		// 显示错误信息
		showError(msg) {
			this.loading = false;
			this.hasError = true;
			this.errorMsg = msg || '登录失败，请重试';
		},
		
		// 跳转到首页
		navigateToIndex() {
			uni.switchTab({
				url: '/pages/index/index'
			});
		},
		
		// 重试登录
		retryLogin() {
			this.hasError = false;
			this.errorMsg = '';
			
			// 根据API可用性选择合适的登录方式
			if (this.canUseGetUserProfile) {
				this.getUserProfile();
			} else {
				// 对于旧版API，提示用户点击授权按钮
				uni.showToast({
					title: '请点击授权按钮',
					icon: 'none'
				});
			}
		}
	}
}
</script>

<style lang="scss">
.wx-login-container {
	width: 100%;
	height: 100vh;
	display: flex;
	flex-direction: column;
	
	.logo-area {
		flex: 1;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		
		.logo {
			width: 200rpx;
			height: 200rpx;
			margin-bottom: 30rpx;
		}
		
		.app-name {
			font-size: 42rpx;
			font-weight: bold;
			color: #333;
		}
	}
	
	.login-area {
		flex: 1;
		display: flex;
		flex-direction: column;
		padding: 0 60rpx;
		
		.status-area {
			flex: 1;
			display: flex;
			flex-direction: column;
			align-items: center;
			justify-content: center;
			
			.loading-status, .error-status, .success-status {
				display: flex;
				flex-direction: column;
				align-items: center;
				
				.status-text {
					margin-top: 30rpx;
					font-size: 32rpx;
					color: #333;
				}
			}
			
			.retry-btn {
				margin-top: 40rpx;
				width: 240rpx;
				height: 80rpx;
				line-height: 80rpx;
				font-size: 30rpx;
			}
			
			.login-btn-area {
				width: 100%;
				
				.login-btn {
					width: 100%;
					height: 90rpx;
					line-height: 90rpx;
					background-color: #07c160;
					font-size: 34rpx;
					margin-bottom: 20rpx;
					
					&::after {
						border: none;
					}
				}
				
				.tip-text {
					display: block;
					text-align: center;
					font-size: 24rpx;
					color: #999;
				}
			}
		}
		
		.policy-area {
			padding: 30rpx 0;
			text-align: center;
			
			.policy-text, .policy-link {
				font-size: 24rpx;
			}
			
			.policy-text {
				color: #999;
			}
			
			.policy-link {
				color: #5199fe;
			}
		}
	}
}
</style> 